﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades.Eventos;
using Datos.Eventos;

namespace Negocio.Eventos
{
    public static class EveReservaBLL
    {
        public static void guardar(this EveReserva eveReserva)
        {
            
            Entities context = new Entities(ConnectionString.CONECTION_STRING);
            context.Connection.Open();

            using (System.Data.Common.DbTransaction transaction = context.Connection.BeginTransaction())
            {

                try
                {
                    List<EveDetalleReserva> eveDetalleReservaList = eveReserva.Eve_Detalle_reserva.ToList();
                    EveContratoEvento eveContratoEvento = eveReserva.Eve_Contrato_evento.FirstOrDefault();
                    eveReserva.Eve_Detalle_reserva = null;
                    eveReserva.Eve_Contrato_evento = null;

                    EveReservaDAL.guardar(context, eveReserva);

                    foreach (EveDetalleReserva eveDetalleReserva in eveDetalleReservaList)
                    {
                        eveDetalleReserva.Eve_Reserva = eveReserva;
                        EveDetalleReservaDAL.guardar(context, eveDetalleReserva);
                    }

                    eveContratoEvento.Eve_Reserva = eveReserva;
                    EveContratoEventoDAL.guardar(context, eveContratoEvento);

                    context.AcceptAllChanges();
                    transaction.Commit();
                }
                catch(Exception ex)
                {
                    transaction.Rollback();
                }
            }

            context.Connection.Close();
        }


        public static void modificar(this EveReserva eveReservaModificada)
        {
            Entities context = new Entities(ConnectionString.CONECTION_STRING);
            context.Connection.Open();

            using (System.Data.Common.DbTransaction transaction = context.Connection.BeginTransaction())
            {
                try
                {
                    EveReserva eveReservaPorModificar = EveReservaDAL.buscar(context, eveReservaModificada.idReserva);
                    eveReservaPorModificar.actualizarPropiedades(eveReservaModificada);
                    context.SaveChanges();
                    context.AcceptAllChanges();
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                }
            }
            context.Connection.Close();

        }


        private static void actualizarPropiedades(this EveReserva eveReservaPorModificar, EveReserva eveReservaModificado)
        {
            eveReservaPorModificar.estado = eveReservaModificado.estado;
            eveReservaPorModificar.fechaRealizacion = eveReservaModificado.fechaRealizacion;
            eveReservaPorModificar.cantidadPersonas = eveReservaModificado.cantidadPersonas;
            eveReservaPorModificar.horarealizacion = eveReservaModificado.horarealizacion;
            eveReservaPorModificar.totalMonto = eveReservaModificado.totalMonto;
            eveReservaPorModificar.IDLocal = eveReservaModificado.IDLocal;

            foreach (EveDetalleReserva eveDetalleReserva in eveReservaPorModificar.Eve_Detalle_reserva)
            {
                EveDetalleReserva eveDetalleReservaModificada = eveReservaModificado.Eve_Detalle_reserva.Where(e => e.idProducto == eveDetalleReserva.idProducto).FirstOrDefault();
                eveDetalleReserva.cantidadProducto = eveDetalleReservaModificada.cantidadProducto;
                eveDetalleReserva.subtotal = eveDetalleReservaModificada.subtotal;
            }

            EveContratoEvento eveContratoEventoPorModificar = eveReservaPorModificar.Eve_Contrato_evento.FirstOrDefault();
            EveContratoEvento eveContratoEventoModificado = eveReservaModificado.Eve_Contrato_evento.FirstOrDefault();
            eveContratoEventoPorModificar.fechaContrato = eveContratoEventoModificado.fechaContrato;
            eveContratoEventoPorModificar.estado = eveContratoEventoModificado.estado;
        }



    }
}
